home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / PROGRAMM / DB_CLIPP / 2510.ZIP / TRSOURCE.EXE / TR_INWKD.PRG < prev    next >
Text File  |  1990-10-22  |  2KB  |  59 lines

  1. *********
  2. * Function : INWKDAYS
  3. * By : Leonard Zerman
  4. * Placed in the public domain by Tom Rettig Associates, 10/22/1990.
  5. *
  6. * Syntax: INWKDAYS( <start date>, <end date> )
  7. * Return: <expN> number of weeks between two dates
  8. * Note..: Both parameters are <expD>
  9. *         Includes both days.
  10. *********
  11. FUNCTION INWKDAYS
  12. PARAMETERS tr_start,tr_end
  13. MEMVAR tr_comp, tr_days, tr_weekdays
  14. PRIVATE tr_comp, tr_days, tr_weekdays
  15. tr_comp = 0
  16. DO CASE
  17.    CASE tr_start > tr_end
  18.       * Error -- start date is greater than end date
  19.       RETURN -1
  20.    CASE tr_start == tr_end .AND. .NOT. ISWKEND( tr_end ) 
  21.       RETURN  1
  22.    CASE ( tr_start == tr_end .AND. ISWKEND( tr_end ) ) .OR.  ;
  23.         ( ISWKEND(tr_start)  .AND. ISWKEND( tr_end )   .AND. ;
  24.         ( tr_end - tr_start ) == 1 ) 
  25.       RETURN  0
  26. ENDCASE
  27. IF ( tr_end - tr_start < 6 )
  28.    DO WHILE ( tr_start <= tr_end )
  29.       IF .NOT. ISWKEND( tr_start )
  30.          tr_comp = tr_comp + 1
  31.       ENDIF
  32.       tr_start = tr_start + 1
  33.    ENDDO
  34.    RETURN(tr_comp)
  35. ENDIF
  36. DO WHILE ISWKEND( tr_start )      && If start is on a weekend skip past it
  37.    tr_start = tr_start + 1
  38. ENDDO
  39. DO WHILE DOW( tr_start ) # 2      && If start is on any day but Monday
  40.    tr_start = tr_start + 1        && compensate to monday w/o weekends
  41.    IF .NOT. ISWKEND( tr_start ) 
  42.       tr_comp = tr_comp + 1
  43.    ENDIF
  44. ENDDO
  45. DO WHILE ISWKEND( tr_end )        && do the same for the end date
  46.    tr_end = tr_end - 1
  47. ENDDO
  48. DO WHILE DOW( tr_end ) # 2 
  49.    tr_end = tr_end -1
  50.    IF .NOT. ISWKEND( tr_end )
  51.       tr_comp = tr_comp + 1
  52.    ENDIF
  53. ENDDO
  54. tr_days     = ( tr_end - tr_start ) + 1
  55. tr_weekdays = tr_days - ( INT( tr_days  / 7 ) * 2 )
  56. RETURN     ( tr_weekdays + tr_comp ) 
  57. * eof inwkdays *
  58.  
  59.